package com.navinfo.tripanalysis.offline.service;

import com.navinfo.tripanalysis.common.pojo.PointProtocol;

import java.io.Serializable;

/**
 * 行程切分公共接口
 * @author hmc
 */
public interface DataCleaningJudgeTripStatusService extends Serializable {


    /**
     * 强制结束行程时长阀值：10分钟
     * 单位:MS
     */
    long FORCE_END_DURATION_THRESHOLD = 10 * 60 * 1000L;

    /**
     * 行程未开始
     */
    int TRIP_NO_START = 0;
    /**
     * 行程开始
     */
    int TRIP_START = 1;
    /**
     * 行程中
     */
    int TRIP_IN = 2;
    /**
     * 行程结束
     */
    int TRIP_END = 3;
    /**
     * 行程强制结束，两个位置点间隔大于FORCE_END_DURATION_THRESHOLD标记为强制结束
     */
    int TRIP_FORCE_END = 4;

    /**
     * 根据0200点切分行程
     * @param lastGpsTime 上一个点上传时间
     * @param gpsTime  当前点上传时间
     * @param point 当前点
     * @return 当前车辆状态
     */
    int judgeTripStatus(Long lastGpsTime, Long gpsTime, PointProtocol point);

    /**
     * 当前时间-上一个时间超过指定阀值，强制结束行程
     *
     * @param lastGpsTime 上一个Point时间点
     * @param gpsTime     当前Point时间点
     * @return
     */
    default boolean isForceEnd(long lastGpsTime, long gpsTime) {
        return (gpsTime - lastGpsTime) > FORCE_END_DURATION_THRESHOLD;
    }
}
